// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Pin Up Azerbayjan Qalaq Online Casino With Exciting Games! – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Saytda slotlar və canlı dilerlərlə oyunlar da iç olmaqla bir neçə əyləncə bölməsi var. Kazino sizə əlaqəli mərc platformasını seçməyi təklif edir. Məsələn, saytın masaüstü versiyası noutbuk və ya kompüterlə mərc edənlər üçün ən sərbəst olacaq. Bu, təchizat resurslarından istifadə baxımından tələbkar deyil və tez daxil olmaq üçün hər vaxt əsər masanıza vərəq qısayolu izafi edə bilərsiniz. Kazino məşhur platformalar üçün ayrıca proqram təklif edir. Tətbiqdən istifadə edərək oyunçular hər fürsətdə mərc edə biləcəklər, çünki ona girişi məhdudlaşdırmaq çətindir.
Bu studiyaların əyləncələri Pinup Casino slot kataloqunda təqdim olunur.
Sonuncular əksər obrazli hadisələr üçün saxlanılan qrafik müvafiqlik mərkəzi ilə əvəz olunur.
Klubun öz bukmeker kontoru mülk ki, bu da ziyarətçilərə idmana idman mərclərini yerləşdirməyi və yarışın nəticələrini düzgün təxmin etdikləri ötrü pul mükafatları qazanmağı təklif edir.
Bu vəziyyətdə əlavə çətinliklərin qarşısını almaq olar. Hesaba dolanacaq yatırmaq ötrü oyunçular avtorizasiya formasında şəxsi identifikatorlarını göstərməklə subyektiv hesablarına iç olmalıdırlar. Sonra, ödənişlər olan bölməni seçməli və oyunçu ötrü mövcud olan ödəniş alətləri ilə tanış olmalısınız.
Pinup Casino Seyrək Beş Dəqiqə Ərzində Sadə Qeydiyyat Təklif Edir
Bir hesab ümumən platformalarda eyni vaxtda istifadə edilə bilər. Kazino proqramı elə tərtib edilmişdir ki, bir neçə kliklə mərc edə bilərsiniz. Oyunların çeşidi müntəzəm genişlənir və siz həm real pulla, həm də istəyə üçün pulsuz kreditlə oynaya bilərsiniz. Siz həmçinin qəfil messencerlərdən istifadə edərək mütəxəssislərlə bağlılıq saxlaya bilərsiniz. Dəstək xidmətində bu sahə üzrə kamil biliklərə və geniş təcrübəyə olma olan mütəxəssislər çalışır. Oyunçular istənilən elan üçün şöbənin əməkdaşları ilə əlaqə saxlaya bilərlər.
Saytda slotlar və canlı dilerlərlə oyunlar da daxil olmaqla bir neçə əyləncə bölməsi mal.
Pin Up bet casino xüsusiyyətlərindən biri avtorizasiyanın var-yox telefonla həyata keçirilməsidir.
Əgər belə vahid onlayn cüzdanınız varsa, qeydiyyatdan keçdikdən dərhal sonra onu bukmeker kontorunun şəxsi hesabınızda hədis profilinizlə əlaqələndirin.
Mobil köçürmə xidmətlərindən, həmçinin WebMoney və Yumani xidmətlərindən istifadə edərkən maksimum 1500 AZN təşkil edir.
Bundan artıq, əksər rus bahisçilərinin marağına səbəb olan qocaman turnirlər yörə xəttin yuxarı hissəsində yerləşdirilir. Əgər siz konkret çempionat və turnirlərə mərc edirsinizsə, o zaman onları “Sevimlilər” bölməsinə artıq edin. Sonra Pin Up bukmeker kontorunun uzun xəttində hər dəfə obyektiv liqanı axtarmaq lazım yox.
Pin Up Bet Azərbaycan – Rəsmi Azerbaycan Bukmeker Kontoru Pin Up Casino
Pin Up mərc şirkəti Azərbaycanın qanuni mərc bazarının gənc oyunçusudur. Lakin “Pin-Up” brendi davamlı müddətdir ki, onlayn qumar əyləncələrinin pərəstişkarlarına məlumdur. Onun altında davamlı illərdir ki, ofşor kazino və bukmeker kontoru iş göstərir. Hüquqi Azərbaycan ofisi cahanşümul həmkarı ilə heç bir şəkildə xarici bağlı yox. Pin-Up casino bölməsi yoxdur və idman mərc oyunları yerli qanunvericiliyə tam bağlı olaraq həyata keçirilir. TsUPIS vasitəsilə döyünmək müştərilərə uduşların sürətli və etibarlı şəkildə ödənilməsinə zəmanət verir.
Onu cəld karta və ya başqa ödəniş aləti vasitəsilə çıxarmaq olar.
Nağd pul çıxarmaq üçün oyunçular imtahan prosesini tamamlamalıdırlar.
Siz ilk gələnə ilk iş əsasında cavab şəhla bilərsiniz, lakin umma müddəti adətən bir neçə ləhzə çəkir.
Bu ofis bonus ovçuluğu sevən oyunçular üçün idealdır. Minimum doldurma məbləği 10 AZN, maksimum isə 6000 AZN-dir. Mobil yazma xidmətlərindən, həmçinin WebMoney və Yumani xidmətlərindən istifadə edərkən maksimum 1500 AZN təşkil edir. Çıxarma, maksimum məbləğlərdə oxşarı məhdudiyyətlərlə sadalanan ümumən üsullarla mümkündür. Ödəniş üçün tapşırıq edilə bilən minimum pul məbləği 30 AZN-dir. Müştəri 1500 AZN-dən ən dolanacaq çıxarsa, ödənişdən avtomatik olaraq 13% töycü tutulur.
Kazino:
Növbəti qədəm ən əlverişli şərtlərə malik sistemi yığmaq və çatışmayan bank rekvizitlərini doldurmaqdır. Hərəkəti təsdiqlədikdən sonra ödəniş emal üçün göndəriləcək. Nağd para çıxarmaq üçün oyunçular təcrübə prosesini tamamlamalıdırlar. Söhbət ondan gedir ki, oyunçu şəxsi sənədlərinin surətlərini təhlükəsizlik xidmətinin ünvanına göndərməlidir. Adətən onların yoxlanılması cəmi bir neçə dəqiqə çəkir.
Sadiqlik proqramı da maraq göstərilənlər sırasındadır.
Bəli, Kycaid vasitəsilə sənədləri yükləmək və ya mobil cihazda axtarmaq.
Məsələn, ödənişdən sonra bəsdir miqdar ara keçibsə və dolanacaq hesaba oturmayıbsa, ianə istəyə bilərsiniz.
Necə ki, onlayn pin.up kazinosunda oynamağa üçün cəzalandırılacaq bir zat belə yoxdur. Onlayn mərc oyunları lap uzun auditoriyaya təqdim olunur. Hər vahid istifadəçi öz mənzilindən çıxmadan çoxlu sayda slot maşınları arasından seçim edə, həmçinin ən yaxşı idman yarışlarına mərc edə bilər. Bunun üçün sürəkli illər təcrübəsi olan və oyunçulara doğrudan təmtəraqlı səviyyəli xidmət pin up təklif edən etibarlı kazinonun təklifindən yararlanmaq yetər edəcək. Gördüyünüz kimi, kazino bonusları həqiqətən maraqlı və gəlirlidir. Ziyarətçilər onlardan danışmaq olar ki, cəld istifadə edə bilərlər, çünki qeydiyyat proseduru əməli pulla oynamağı planlaşdıranlar ötrü cəbri bir addımdır.
Yeni Kriptovalyuta Kazinolarını Skan Etmək üçün Səmimi Məsləhətlər
Bunlar izafi seçimləri olmayan klassik slotlardır ki onların oyun prosesi mümkün miqdar səmimi hazırlanıb. Daha seyrək əhəmiyyətli seçim parlaq vizual üslubu ilə seçilən yeni slot maşınlarıdır. Müasir slotlar bonus seçimlərinin, o cümlədən subyektiv simvolların və pulsuz fırlanmaların olması ilə seçilir.
Sayt Pin Up casino az para ötrü əyləncə həvəskarları üçün şans oyunlarının uzun seçimini təklif edir.
Oyunçular şanslarını artırmaq üçün ən çox bildikləri idman növündən istifadə edə bilərlər.
Onlayn söhbət və ya texniki xidmət telefonu Pin Up casino azerbaycan, oyunçular bu oyun klubunun rəngarəng bonus təkliflərini əldə görmək, istifadə etmək və oynamaqla bağlı məsləhətləşə biləcəklər.
Bu, doğrulama prosesini tamamlayır və vur-tut vahid neçə dəqiqə çəkəcəkdir.
Rəsmi sayt Pin Up casino ilə uyar qumar resursları arasındakı uçurum ondadır ki, burada siz bukmeker kontorunda idman yarışlarına mərc edə bilərsiniz.
Pin Up Bet AZ şirkəti çoxillik təcrübəyə malikdir və lap təzə texnologiyalardan istifadə edir ki, bu da ona mərc prosesində təhlükəsizlik və rahatlığı təmin etməyə imkan verir. Müştərilər əlverişli bonuslar, eləcə də ümumən məşhur platformalarda mərclərə çıxışdan yararlana bilərlər. Video slotlar, obrazli kazino, stolüstü oyunlar, idman mərcləri, bədii mərclər, virtual idman Pin Up Casino virtual oyun platforması 2006-cı ildə qurulmuşdur və veb saytında dünyanın ən yaxşı satıcılarından bir neçə min oyun təklif edir. Bu, rəsmi kazinodur, onun qüvvədə olan lisenziyası haqqında bildiriş səhifənin əksik hissəsində təqdim olunur və Azərbaycan, Türkiyə və Rusiyada onlayn kazinolara rüsxət verir.